/**
 * 
 */
package br.edu.unoesc.smschool.model;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @author Luiz
 * data: 15-08-2011
 */
@Entity
public class Endereco extends GenericModel implements Comparable<Endereco>{
    
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long codigo;
    @Column(name="nomeRua")
    private String rua;
    @Column(name="nomeBairro")
    private String bairro;
    @Column
    private int numero;
    @Column
    private String complemento;
    @Column(name="CEP")
    private String cep;
    @ManyToOne(cascade=CascadeType.MERGE,fetch=FetchType.LAZY)
    private Cidade cidade;

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public Cidade getCidade() {
        return cidade;
    }

    public void setCidade(Cidade cidade) {
        this.cidade = cidade;
    }

    public Long getCodigo() {
        return codigo;
    }

    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }

    public String getComplemento() {
        return complemento;
    }

    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public String getRua() {
        return rua;
    }

    public void setRua(String rua) {
        this.rua = rua;
    }

    @Override
    public boolean equals(Object obj){
        Endereco outro = (Endereco)obj;
        return new EqualsBuilder().append(this.getRua(), outro.getRua()).isEquals();
    }

    @Override
    public int hashCode(){
        return new HashCodeBuilder().append(this.getRua()).hashCode();
    }

    @Override
    public String toString(){
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE).append("Nome",this.getRua()).toString();
    }

    public int compareTo(Endereco o) {
        return new CompareToBuilder().append(this.getRua(),o.getRua()).toComparison();
    }

}